from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from fdfs_client.client import Fdfs_client
"""
自定义存储类的格式
1，定义类继承自Storage
2，重写init方法，保证变量能够被初始化
"""
@deconstructible
class MyStorage(Storage):
    def __init__(self,base_url = None):
        if not base_url:
            base_url = settings.BASE_URL
        self.base_url = base_url

    def open(self,name,mode = 'rb:'):
        #当去打开一张图片的时候回调用该方法
        pass

    def save(self,name,content,max_length=None):
        #当去存储图片的时候调用该方法
        """

        :param name:图片名字
        :param content: 图片内容
        :param max_length: 图片最大上传量
        :return:
        """
        #1，创建对象
        client = Fdfs_client('utils/fdfs/client.conf')

        #2,上传
        result = client.upload_by_buffer(content.read())

        #3，判断图片是否上传成功
        if result["Status"] == "Upload successed.":
            return result ["Remote file_id"]
        else:
            raise Exception("图片上传失败")
    def exists(self,name):
        #存储的时候判断图片是否存在
        return False

    def url(self,name):
        #当访问图片的时候返回的图片地址
        return self.base_url+name

    def url(self,name):
        pass